package com.example.demo.service;

import com.example.demo.dto.TaskApprovalStatusDTO;
import com.example.demo.dto.MultipleApprovalResultDTO;
import org.springframework.stereotype.Service;

/**
 * 任务路由服务
 * 负责根据任务数据、流程节点信息进行路由，获取审批人信息
 */
public interface TaskRoutingService {

    /**
     * 为任务审批状态分配审批人
     * 根据任务数据、流程节点的部门和角色信息，通过路由规则获取审批人
     * 
     * @param taskApprovalStatusId 任务审批状态ID
     * @return 更新后的任务审批状态信息
     */
    TaskApprovalStatusDTO assignApprover(Long taskApprovalStatusId);

    /**
     * 批量为任务审批状态分配审批人
     * 
     * @param taskFlowId 任务流程关系ID
     * @return 成功分配的数量
     */
    int batchAssignApprovers(Long taskFlowId);

    /**
     * 根据数据源ID批量分配审批人
     * 
     * @param dataSourceId 数据源ID
     * @return 成功分配的数量
     */
    int batchAssignApproversByDataSource(Long dataSourceId);
    
    /**
     * 为任务分配多个审批人并根据负载均衡选择最合适的审批人
     * 
     * @param taskApprovalStatusId 任务审批状态ID
     * @return 多审批人分配结果信息
     */
    MultipleApprovalResultDTO assignMultipleApprovers(Long taskApprovalStatusId);
}